<?php
/**
 * 冒泡排序, 冒泡的含义是: 每查找一次只找到最小或者最大的一个元素, 第二次找到第二大/小的元素.....一直循环知道整个数组都是排好序的
 * 整体的排序过程感觉像是冒泡一般, 是一个逐步的过程
 * User: yuesir
 * @author //github.com/yuesir
 */

/**
 * 冒泡排序: 每遍历一次只找到最小或者最大的元素
 * @param array $bucket
 */
function bubbleSort(array &$bucket) {
    if ( empty($bucket)) return;

    $count = count($bucket);

    //外层的循环表示需要循环多少次(每次都找到一个最大/小的元素)
    for ($row = 0; $row < $count; $row++) {
        //针对具体的每次循环, 如果 前面的值 > 后面的值, 则调换位置, 这样找出的是最大的元素, 最终得到的是按照从小到大排好序的数组
        //这里 $count - $row - 1 是因为每次排序都找到一个元素, 所以除了第一行外, 往后遍历的时候不需要比较所有的元素;
        //($count - $row) 再 -1 是因为只需要比较到最后的第 2 个元素 和 最后第 1 个元素比较完即可
        for ($i = 0; $i < $count - $row - 1; $i++) {
            if ($bucket[$i] > $bucket[$i+1]) {
                $tmp = $bucket[$i+1];
                $bucket[$i+1] = $bucket[$i];
                $bucket[$i] = $tmp;
            }
        }
    }

}